/**
 * 
 */
package algo3c2g15.vista;

import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;

import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JFrame;

import algo3c2g15.domain.*;

public class VentanaGuardarUnidades extends JFrame {
	private static final long serialVersionUID = 1L;
	
	
	private JButton botonAgregar = new JButton ();
	private JButton botonSacar = new JButton ();
	private JList jLUnidadesOrigen = new JList();
	private JList jLUnidadesDestino = new JList();
	private JScrollPane jSPUnidadesOrigen;
	private JScrollPane jSPUnidadesDestino;
	private ArrayList<Unidad> unidadesOrigen;
	private Transporte contenedor;
	private Region region;
	
	public VentanaGuardarUnidades(Region region, Transporte contenedor) {
		setBounds(400, 200, 310, 200);
		setResizable(false);
		setAlwaysOnTop(true);
		setVisible(true);
		this.region = region;
		if (contenedor.getClass() == Camion.class){
			this.unidadesOrigen = region.getCivilesTransportables();
		}
		else{
			this.unidadesOrigen = region.getSoldadosTransportables();
		}

		this.contenedor = contenedor;
		
		jLUnidadesOrigen.setSelectionMode(0);		
		jSPUnidadesOrigen = new JScrollPane( jLUnidadesOrigen );
		jSPUnidadesOrigen.setBounds(10,30,120,100);

		botonAgregar.setBounds(130,50,40,20);
		botonAgregar.addActionListener(getBotonAgregarListener());
		botonAgregar.setText(">>");
		botonAgregar.setMargin(new Insets(5, 2, 5, 2));
		botonAgregar.setFont(new Font("SansSerif", Font.BOLD, 10));
		this.add(botonAgregar);
		
		botonSacar.setBounds(130,100,40,20);
		botonSacar.addActionListener(getBotonSacarListener());
		botonSacar.setText("<<");
		botonSacar.setMargin(new Insets(5, 2, 5, 2));
		botonSacar.setFont(new Font("SansSerif", Font.BOLD, 10));
		this.add(botonSacar);
		
		jLUnidadesDestino.setSelectionMode(0);		
		jSPUnidadesDestino = new JScrollPane( jLUnidadesDestino );
		jSPUnidadesDestino.setBounds(173,30,120,100);
		
		this.add(jSPUnidadesOrigen);
		this.add(jSPUnidadesDestino);
		cargarListaUnidadesOrigen();
		cargarListaUnidadesDestino();
	}
	
	private ActionListener getBotonAgregarListener() {
		return new EscuchaAgregar();
	}
	
	private class EscuchaAgregar implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			final Unidad unidad; 
			unidad = (Unidad) jLUnidadesOrigen.getSelectedValue();
			if ((unidad != null) && (contenedor.subirPasajero((Humano) unidad))){
				unidadesOrigen.remove(unidad);
				region.removeUnidad(unidad);
				cargarListaUnidadesOrigen();
				cargarListaUnidadesDestino();
				VentanaGuardarUnidades.this.repaint();
			}
			else{
				//no se pudo subir
			}
						
		}
	}
	
	private ActionListener getBotonSacarListener() {
		return new EscuchaSacar();
	}
	
	private class EscuchaSacar implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			final Unidad unidad; 
			unidad = (Unidad) jLUnidadesDestino.getSelectedValue();
			if (unidad !=null){
				contenedor.sacarPasajero((Humano) unidad);
				unidadesOrigen.add(unidad);
				region.addUnidad(unidad);
				cargarListaUnidadesOrigen();
				cargarListaUnidadesDestino();
				VentanaGuardarUnidades.this.repaint();
			}
		}
	}
	
	public void cargarListaUnidadesOrigen()
	{	
		jLUnidadesOrigen.setListData(unidadesOrigen.toArray());
		jSPUnidadesOrigen.setViewportView(jLUnidadesOrigen);
	}
	
	public void cargarListaUnidadesDestino()
	{	
		jLUnidadesDestino.setListData( contenedor.getPasajeros().toArray());
		jSPUnidadesDestino.setViewportView(jLUnidadesDestino);
	}
	
	
	/*
	HashSet<Unidad> unidades = new HashSet<Unidad>();
	for (Object o : jLUnidades.getSelectedValues()) {
		Unidad unidad = (Unidad) o;
		unidades.add(unidad);
	}
	*/
}
